
/**
 * @brief    Defines global (external) ply IDs and properties for a composite
 * material laminate.
 *
 * @author   wuxingchuang
 * @date     2025.06.17
 *          _
 *      ___| |__   ___ _ __   __ _  ___  _ __   __ _
 *     / __| '_ \ / _ \ '_ \ / _` |/ _ \| '_ \ / _` |
 *     \__ \ | | |  __/ | | | (_| | (_) | | | | (_| |
 *     |___/_| |_|\___|_| |_|\__, |\___/|_| |_|\__, |
 *                           |___/             |___/
 * @copyright (c) 2024 by 神工仿真, All Rights Reserved.
 */
#pragma once
#include "DataStructure/Common/Id.h"
#include "DataStructure/Common/Real.h"
#include "DataStructure/Input/Property/PropertyBase.h"

SG_DATASTRUCTURE_FEM_NAMESPACE_OPEN

struct PCOMPGData : public PropertyBase
{
    struct PLYData
    {
        SG::DataStructure::Common::Id   m_GPLYID  = 0;      ///<
        SG::DataStructure::Common::Id   m_MID     = 0;      ///<
        SG::DataStructure::Common::Real m_THICK   = 0.0;    ///<
        SG::DataStructure::Common::Real m_THETA   = 0.0;    ///<
        SG::DataStructure::Common::I64  m_SOUT    = 0;      ///<
        SG::DataStructure::Common::Id   m_MIDMTX  = 0;      ///<
        SG::DataStructure::Common::Real m_VF      = 0.0;    ///<
        SG::DataStructure::Common::Real m_VV      = 0.0;    ///<
        SG::DataStructure::Common::Real m_CTEMP   = 0.0;    ///<
        SG::DataStructure::Common::Real m_MOIST   = 0.0;    ///<
        char                            m_CRIT[4] = { 0 };  ///<
        SG::DataStructure::Common::I64  m_NFTI    = 0;      ///<
        char                            m_FTI[96] = { 0 };  ///<
        SG::DataStructure::Common::I64  m_GEFLG   = 0;      ///<
    };

    SG::DataStructure::Common::I64  m_NPLIES   = 0;         ///<
    SG::DataStructure::Common::Real m_Z0       = 0.0;       ///<
    SG::DataStructure::Common::Real m_NSM      = 0.0;       ///<
    SG::DataStructure::Common::Real m_SB       = 0.0;       ///<
    SG::DataStructure::Common::I64  m_FT       = 0;         ///<
    SG::DataStructure::Common::Real m_TREF     = 0.0;       ///<
    SG::DataStructure::Common::Real m_GE       = 0.0;       ///<
    char                            m_MICRO[4] = { 0 };     ///<
    SG::DataStructure::Common::Id   m_domainId = 0;         ///<

    std::vector<PLYData> m_PLYList;
};

///@{ @brief operator override
DECLSPEC bool operator== (const PCOMPGData::PLYData& val1, const PCOMPGData::PLYData& val2);

DECLSPEC bool operator== (const PCOMPGData& val1, const PCOMPGData& val2);
///}@
SG_DATASTRUCTURE_FEM_NAMESPACE_CLOSE
